/*
 * 
 * 
 * 
 */
package com.hboxs.asl.service;

import com.hboxs.asl.Page;
import com.hboxs.asl.Pageable;
import com.hboxs.asl.entity.Article;
import com.hboxs.asl.entity.Attribute;
import com.hboxs.asl.entity.Product;
import com.hboxs.asl.entity.Product.OrderType;

import java.util.Map;

/**
 * Service - 搜索
 */
public interface SearchService {

    /**
     * 创建索引
     */
    void index();

    /**
     * 创建索引
     *
     * @param type 索引类型
     */
    void index(Class<?> type);

    /**
     * 创建索引
     *
     * @param article 文章
     */
    void index(Article article);

    /**
     * 创建索引
     *
     * @param product 商品
     */
    void index(Product product);

    /**
     * 删除索引
     */
    void purge();

    /**
     * 删除索引
     *
     * @param type 索引类型
     */
    void purge(Class<?> type);

    /**
     * 删除索引
     *
     * @param article 文章
     */
    void purge(Article article);

    /**
     * 删除索引
     *
     * @param product 商品
     */
    void purge(Product product);

    /**
     * 搜索文章分页
     *
     * @param keyword  关键词
     * @param pageable 分页信息
     * @return 文章分页
     */
    Page<Article> search(String keyword, Pageable pageable);

    /**
     * 搜索商品分页
     *
     * @param keyword    关键词
     * @param brId       品牌ID
     * @param startPrice 最低价格
     * @param endPrice   最高价格
     * @param orderType  排序类型
     * @param pageable   分页信息
     * @return 商品分页
     */
    Page<Product> search(String keyword, Long brId, Map<Attribute, String> attributeValue, Integer startPrice, Integer endPrice, OrderType orderType, Pageable pageable);

    /**
     * 快捷提示
     *
     * @param keyword
     * @return
     */
    String[] suggestSearch(String keyword);
}